package demo2;


class Money implements Cloneable{ //调用clone方法实现一个空接口且重写clone方法
    public double money=9.9;
    protected Object clone()//重写clone（）方法
        throws CloneNotSupportedException{
            return super.clone();//调用父类的clone方法复制当前对象的内存，做了浅拷贝。
        }
}
public class Person implements Cloneable {
    public int age;
    public String name;
    public Money m=new Money();
    public Person(String name,int age){
        this.age=age;
        this.name=name;
    }
    public String toString() {
        return "Person{"+"age="+age+"，name="+name+'\''+'}';
    }
    protected Object clone() //重写clone方法
        throws CloneNotSupportedException{//声明一个“风险”，处理潜在风险
          Person tp=(Person) super.clone();//调用父类的clone()方法，完成基本属性的浅拷贝，但内部其它类实例化的对象不会被拷贝
          tp.m=(Money) this.m.clone();//手动对内部实例化对象（引用类型）也执行拷贝，形成深拷贝
         return tp;
        }

}
